/*
		atoi函数的使用和模拟实现

		夏思成

		2024年4月5号

		秦都区
*/

//
//#include <stdio.h>
//#include <stdlib.h>
//
//int main()
//{
//	printf("%d\n", atoi("12345"));//将该字符串转换为整数并作为返回值返回
//	printf("%d\n", atoi(""));//atoi遇到空字符串不会转换成整数而返回0
//	printf("%d\n", atoi("abc"));//atoi遇到纯字符也无法转换成整数也返回0
//	printf("%d\n", atoi("   abc"));
//	printf("%d\n", atoi("123"));
//	printf("%d\n", atoi("-123"));
//	printf("%d\n", atoi("       -123"));//atoi函数会自动跳过前面的空白字符
//	return 0;
//}





//atoi函数的模拟实现

#include <stdio.h>
#include <assert.h>
#include <ctype.h>

int my_atoi(const char* str)
{
	assert(str);

	char* s = (char*)str;
	int num = 0;
	int signal = 1;

	//判断该字符串中是否含正负号
	while (*str++)
	{
		if (*str == '-' || *str == '+')
		{
			signal = (*str == '-') ? -1 : 1;
			break;
		}
	}

	//寻找数字字符，并转化为整型累加起来
	while (*s != '\0')
	{
		if (isdigit(*s))
		{
			num *= 10;
			num += *s - '0';
		}
		s++;
	}


	return signal * num;
}


int main()
{
	char a[] = " xxxx-123";
	int ret = my_atoi(a);
	printf("%d\n", ret);
	return 0;
}
